package com.huiruan.service.impl;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.tree.Tree;
import cn.hutool.core.lang.tree.TreeNode;
import cn.hutool.core.lang.tree.TreeUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.huiruan.entity.SysMenu;
import com.huiruan.entity.SysRoleMenu;
import com.huiruan.service.SysMenuService;
import com.huiruan.mapper.SysMenuMapper;
import com.huiruan.utils.Result;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import java.util.List;

/**
* @author CTL
* @description 针对表【sys_menu(菜单权限表)】的数据库操作Service实现
* @createDate 2025-07-15 21:25:02
*/
@Service
public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu>
    implements SysMenuService{

    @Override
    public List<SysMenu> findMenuByRoleId(Object roleId) {
        return baseMapper.listMenusByRoleId(roleId);
    }

    @Override
    public Result removeMenuById(Long id) {
        // 查询父节点为当前节点的节点
        List<SysMenu> menuList = this.list(Wrappers.<SysMenu>query().lambda().eq(SysMenu::getParentId, id));
        if (CollUtil.isNotEmpty(menuList)) {
            return Result.failed("菜单存在下级节点 删除失败");
        }
        // todo 删除
        //sysRoleMenuMapper.delete(Wrappers.<SysRoleMenu>query().lambda().eq(SysRoleMenu::getMenuId, id));
        // 删除当前菜单及其子菜单
        return Result.success(this.removeById(id));
    }

    @Override
    public Boolean updateMenuById(SysMenu sysMenu) {
        return this.updateById(sysMenu);
    }

    @Override
    public List<Tree<Long>> getMenuTree(Long parentId, String menuName, String type) {
//        Long parent = parentId == null ? CommonConstants.MENU_TREE_ROOT_ID : parentId;
//
//        List<TreeNode<Long>> collect = baseMapper
//                .selectList(Wrappers.<SysMenu>lambdaQuery()
//                        .like(StrUtil.isNotBlank(menuName), SysMenu::getName, menuName)
//                        .eq(StrUtil.isNotBlank(type), SysMenu::getMenuType, type)
//                        .orderByAsc(SysMenu::getSortOrder))
//                .stream()
//                .map(getNodeFunction())
//                .toList();
//
//        // 模糊查询 不组装树结构 直接返回 表格方便编辑
//        if (StrUtil.isNotBlank(menuName)) {
//            return collect.stream().map(node -> {
//                Tree<Long> tree = new Tree<>();
//                tree.putAll(node.getExtra());
//                BeanUtils.copyProperties(node, tree);
//                return tree;
//            }).toList();
//        }

        //return TreeUtil.build(collect, parent);
        return  null;
    }
}




